17098
15628
Jeg har rodet med JSON i nogen tid, bare skubbet det ud som tekst, og det har ikke skadet nogen (som jeg kender til), men jeg vil gerne begynde at gøre tingene ordentligt.
Jeg har set så mange påståede "standarder" for JSON-indholdstypen:
ansøgning / json
ansøgning / x-javascript
tekst / javascript
tekst / x-javascript
tekst / x-json
Men hvilken er korrekt eller bedst? Jeg finder ud af, at der er sikkerhedsproblemer og browsersupport, der varierer mellem dem.
Jeg ved, at der er et lignende spørgsmål, hvilken MIME-type, hvis JSON returneres af en REST API ?, men jeg vil gerne have et lidt mere målrettet svar. 
1
2
Næste
For JSON-tekst:
ansøgning / json
MIME-medietypen til JSON-tekst er application / json. Standardkodningen er UTF-8. (Kilde: RFC 4627).
For JSONP (kører JavaScript) med tilbagekald:
ansøgning / javascript
Her er nogle blogindlæg, der blev nævnt i de relevante kommentarer:
Hvorfor skal du ikke bruge tekst / html til JSON
Internet Explorer har undertiden problemer med applikation / json
En ret komplet liste over Mimetyper og hvad man skal bruge dem til
Den officielle mime-typeliste på IANA fra @ gnrfans svar nedenfor
|
IANA har registreret den officielle MIME-type til JSON som applikation / json.
Når man bliver spurgt om hvorfor ikke tekst / json, synes Crockford at have sagt, at JSON ikke rigtig er JavaScript eller tekst, og også IANA var mere tilbøjelige til at uddele applikation / * end tekst / *.
Flere ressourcer:
Medietyper
Anmodning om kommentarer 4627
bluesmoon: JSON har en type
|
For JSON:
Indholdstype: applikation / json
For JSON-P:
Indholdstype: applikation / javascript
|
Naturligvis er den korrekte MIME-medietype til JSON application / json, men det er nødvendigt at indse, hvilken type data der forventes i din applikation.
For eksempel bruger jeg Ext GWT, og serverens svar skal gå som tekst / html, men indeholder JSON-data.
Kundeside, Ext GWT form lytter
uploadForm.getForm (). addListener (ny FormListenerAdapter ()
{
@Override
offentlig ugyldighed onActionFailed (formularformular, int httpStatus, strengresponstekst)
{
MessageBox.alert ("Fejl");
}
@Override
offentligt ugyldigt onActionComplete (Formular form, int httpStatus, String responseText)
{
MessageBox.alert ("Succes");
}
});
I tilfælde af anvendelse af applikation / json-svarstype foreslår browseren mig at gemme filen.
Kildekodestykke på serversiden ved hjælp af Spring MVC
returner nyt AbstractUrlBasedView ()
{
@SuppressWarnings ("ikke markeret")
@Override
beskyttet ugyldigt renderMergedOutputModel (kortmodel, HttpServletRequest anmodning,
HttpServletResponse svar) kaster undtagelse
{
respons.setContentType ("tekst / html");
respons.getWriter (). skriv (json);
}
};
|
JSON:
Svar er dynamisk genererede data i henhold til de forespørgselsparametre, der sendes i URL'en.
Eksempel:
{"Navn": "Foo", "Id": 1234, "Rang": 7}
Indholdstype: applikation / json
JSON-P:
JSON med polstring.
Svaret er JSON-data med et funktionsopkald viklet rundt om det.
Eksempel:
functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7});
Indholdstype: applikation / javascript
|
Hvis du bruger Ubuntu eller Debian, og du serverer .json-filer via Apache, vil du muligvis servere filerne med den rigtige indholdstype. Jeg gør dette primært, fordi jeg vil bruge Firefox-udvidelsen JSONView
Apache-modulet mod_mime hjælper med at gøre dette let. Men med Ubuntu skal du redigere filen /etc/mime.types og tilføje linjen
ansøgning / json json
Genstart derefter Apache:
sudo service apache2 genstart
|
Hvis du ringer til ASP.NET Web Services fra klientsiden, skal du bruge application / json for at det fungerer. Jeg tror, ​​det er det samme for jQuery og Ext-rammerne.
|
Den rigtige indholdstype til JSON er applikation / json, medmindre du bruger JSONP, også kendt som JSON med polstring, som faktisk er JavaScript, og så den rigtige indholdstype ville være applikation / javascript.
|
Der er ingen tvivl om, at applikation / json er den bedste MIME-type til et JSON-svar.
Men jeg havde en vis erfaring, hvor jeg måtte bruge applikation / x-javascript på grund af nogle komprimeringsproblemer. Mit hostingmiljø er delt hosting med GoDaddy. De tillader mig ikke at ændre serverkonfigurationer. Jeg havde tilføjet følgende kode til min web.config-fil til komprimering af svar.
















Ved at bruge dette blev .aspx-siderne komprimeret med g-zip, men JSON-svar var ikke. Jeg tilføjede

i sektionerne for statiske og dynamiske typer. Men dette komprimerer ikke JSON-svar overhovedet.
Derefter fjernede jeg denne nyligt tilføjede type og tilføjede

i både de statiske og dynamiske typer sektioner og ændrede svarstypen i
.ashx (asynkron handler) til
ansøgning / x-javascript
Og nu fandt jeg ud af, at mine JSON-svar blev komprimeret med g-zip. Så jeg anbefaler personligt at bruge
ansøgning / x-javascript
kun hvis du vil komprimere dine JSON-svar på et delt hostingmiljø. Fordi i delt hosting tillader de dig ikke at ændre IISkonfigurationer.
|
Kun når jeg bruger application / json som MIME-typen, har jeg følgende (fra november 2011 med de nyeste versioner af Chrome, Firefox med Firebug):
Ingen flere advarsler fra Chrome, når JSON indlæses fra serveren.
Firebug tilføjer en fane til svaret, der viser dig JSON-dataene
formateret. Hvis MIME-typen er forskellig, vises den bare som
'Svarindhold'.
|
Ikke alt fungerer til applikation af indholdstype / json.
Hvis du bruger Ext JS-formular til at uploade fil, skal du være opmærksom på, at serversvaret parses af browseren for at oprette dokumentet til